跳至主要内容

SQL I

SQL I 資料庫


i think you have gotten know what is that in vacational high school

HAHA but ...let,s review it

All right What is SQL

Structure Query Language

是一種特定目的程式語言,用於管理關聯式資料庫管理系統(RDBMS),或在關係流資料管理系統(RDSMS)中進行流處理。 (當然還有另一種東西叫NoSQL) 指令參考

So in summary SQL used for DB(DataBase)

DB(DataBase)

broad sense: that mean the place where we store data narrow sense: DB is set of a group of common data

Application Example: phone contact(if we didn,t set up of our DB )


benefit of DB

    1. Redundancy
    1. Consistency
    1. Data Sharing
    1. Data Indepence
    1. Integrity
    1. Reduce Paper
    1. Security

What are you waiting for Just Download

SQlite Studio


Yah! introduce DB

延伸閱讀 DT稍後介紹(先知道DB 有很多的DT)


DataTable

資料庫的儲存方式長的很像Excel


橫看Row 直看Col


DataBase 結構

Bit -> Byte -> Field -> Record -> Table -> Data Base 主要要知道

  1. 一個DB Server 可以有很多DataBase(資料庫)
  2. 一個DataBase 可以有很多 Datatable(資料表)
  3. 一個Datatable 可以有很多 Record(資料紀錄)
  4. 一個Record 可以有很多Field/Column(資料欄位)

DB VS DBMS

DataBase vs DataBase Management System

what DBMS is you know?


Download Example

Example連結

開啟SQLite Studio 並且匯入這個SQL檔案


You will see Database name and what datatables it involve


傳說中資料庫有四種基礎命令

也就是SUID Select Update Insert Delete 選擇 更新 插入 刪除 概念跟CRUD一樣


Select 查詢

SELECT * FROM `Class`;

"* 為所謂的萬用字元 也就是全部的意思" 那語法總得來說就是

SELECT * FROM `資料表`;

當然我們也可以不一定要Show出全部的Columns(欄位) 也能一次抓多欄/單欄

SELECT (`Class_name`) FROM `Class`; --單欄 Class_name
SELECT (`Class_name`,`Class_id`) FROM `Class`; --多欄 Class_id

稍微進階的查詢Query我們可以像程式語言一樣加入查詢條件,但...


不是If 是Where 來個範例吧

SELECT * FROM `Class` WHERE `Class_name` = "四資管二A";

你會發現語法是WHERE [condition]


Insert 插入

INSERT INTO `Class` (`Class_name`,`Class_id`) VALUES ("四企管二A","4");
INSERT INTO `Class` VALUES ("四企管二A","4");--插入全欄位值 且Value插入順序正確可忽略欄位名稱
INSERT INTO `資料表` (`欄位1`,`欄位2`,...) VALUES ("Value1","Value2",...);

做完之後 Class 資料表就多了一個 四企管二A了


Update 更新

UPDATE `Class` SET `Class_name`="四企管二Z"  WHERE `Class_name` = "四企管二A";
UPDATE `資料表` SET `欄位名稱1`=`欄位值1`,`欄位名稱2`=`欄位值2`... [WHERE {條件式}]

四企管二A 變成 四企管二Z 了XD


Delete 刪除

DELETE FROM `Class` WHERE `Class_name`="四企管二Z";
DELETE FROM `資料表` WHERE 條件式;

企管88


玩了這麼多 我提供的資料庫是時候自己創建了


Create 創建資料表\資料庫

還記得這張圖嗎 所以我們必須把最外層的DB建立起來

CREATE DATABASE [database_name];

同樣 建立一張DT

CREATE DATATABLE [datatable_name](
col1 datatype,
col2 datatype,
col3 datatype,
);
--======
CREATE TABLE customers (
C_Id INT,
Name varchar(50),
Address varchar(255),
Phone varchar(20)
);

ALTER 修改資料表

增加欄位

ALTER TABLE table_name ADD column_name datatype;
更改資料欄位型別(沒錯ALTER 再ALTER)
ALTER TABLE table_name ALTER COLUMN column_name datatype;
刪除欄位 (DROP COLUMN)
ALTER TABLE table_name DROP COLUMN column_name;

DROP 刪除資料表

刪除資料表 (DROP TABLE)

完全刪除整個資料表。

DROP TABLE table_name;

僅刪除資料表內容,但保留結構 (TRUNCATE TABLE)

TRUNCATE TABLE table_name;

資料表還在,只是資料清空了。

刪除資料庫 (DROP DATABASE)
DROP DATABASE database_name;

蝦 指令超多? 這只是皮毛 接下來講講限制

資料庫限制 SQL Consraints 有六個類別 通常是拿來限制 欄位可/不可 更動或新增的條件

  1. NOT NULL 非空值限制
  2. UNIQUE 唯一限制
  3. PRIMARY KEY 主鍵限制
  4. FOREIGN KEY 外鍵限制
  5. CHECK 檢查限制
  6. DEFAULT 預設值限制

情境 顧客資料表

由於不能有顧客的編號(ID)為空值 我們會再設計DT的時候添加 NOT NULL

CREATE TABLE customer (
C_Id INT NOT NULL,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20)
);

承上題情境

由於顧客編號(ID)不能有重複的 為了避免衝突 我們也可以加入UNIQUE

CREATE TABLE customer (
C_Id INT NOT NULL UNIQUE,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20)
);
--OR
CREATE TABLE customer (
C_Id INT NOT NULL,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20),
UNIQUE (C_Id)
);

關聯(Relation)


指令變化

資料庫有很多廠商 基本上都遵循ISO的SQL標準但是各家的指令與語法還是會有差別(每個DB怎麼操作 有時候需要特別去查)


雖然SQL指令百百種 但是...

師父領進門修行靠個人

Link


希望各位都理解拉